package com.lkd.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.lkd.entity.NodeEntity;
import org.apache.ibatis.annotations.*;

@Mapper
public interface NodeDao extends BaseMapper<NodeEntity> {
             // count(1) ,统计的是一列的数据，根据条件查询，如果为null,则为0
//  count（1）和count（*）之间没有区别，因为count（*）count（1）都不会去过滤空值
    //1、如果列为主键，count(列名)效率优于count，如果列不为主键，count(1)效率优于count(列名)，如果表中存在主键，count(主键列名)效率最优 ，如果表中只有一列，则count(*)效率最优，如果表有多列，且不存在主键，则count(1)效率优于c。
    //2、count(1)，其实就是计算一共有多少符合条件的行。1并不是表示第一个字段，而是表示一个固定值。其实就可以想成表中有这么一个字段，这个字段就是固定值1，count(1)，就是计算一共有多少个1。
            //https://baijiahao.baidu.com/s?id=1726075901139220538
    @Select("select IFNULL(COUNT(1),0) from tb_node where region_id=#{regionId} ")

    Integer getCountByRegion(Long regionId);

    @Results(id = "nodeMap",value = {
            @Result(property = "id",column = "id"),
            @Result(property = "vmCount",column = "id",many = @Many(select = "com.lkd.dao.VendingMachineDao.getCountByNodeId")),
            @Result(property = "regionId",column = "region_id"),
            @Result(property = "region",column = "region_id",one = @One(select = "com.lkd.dao.RegionDao.selectById")),
            @Result(property = "businessId",column = "business_id"),
            @Result(property = "businessType",column = "business_id",one = @One(select = "com.lkd.dao.BusinessTypeDao.selectById"))
    })
    @Select("select * from tb_node where id=#{nodeId} limit 1")
    NodeEntity getById(long nodeId);

    @ResultMap(value = "nodeMap")
    @Select("select * from tb_node where `name` like CONCAT('%',#{name},'%')")
    Page<NodeEntity> searchByName(Page<NodeEntity> page,String name);


}
